parser grammar anasint;

options {
  language = Java;
  tokenVocab = analex;
}

@header {
package PL.prac9;
}

@members {
  // Al faltar un token, intenta una recuperación de errores llamando a esta función, por lo tanto no lanzaba la excepción y sólo mostraba el error indicándolo.
  // Sobreescribimos la función para que lance de nuevo la excepción y poder capturarla por nuestra cuenta.
  protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws RecognitionException {
      throw new MismatchedTokenException(ttype, input);
  }
  //Variable que controlará si la regla se encuentra o no antes de un end de etiqueta.
  boolean in;
  int numerrores = 0;
  public int errores () {
    return numerrores;
    }
}
 
//Empieza el analizador sintáctico.
entrada : bloque EOF;
bloque : (etiquetaa linea etiquetac) | (TITULO linea END_TITULO AUTOR linea END_AUTOR);
linea : (PALABRA|bloque)*;
etiquetaa : MENOR PALABRA MAYOR ;
etiquetac : MENOR BARRA PALABRA MAYOR ;